<template>
    <el-breadcrumb class="app-breadcrumb" separator-class="el-icon-arrow-right">
        <el-breadcrumb-item :to="{ path: '/' }" class="bread-icon-first"><svg-icon class="bread-icon" icon-class="home"/></el-breadcrumb-item>
        <transition-group name="breadcrumb">
            <el-breadcrumb-item v-for="(item,index) in levelList" :key="item.path">
                <span v-if="item.redirect==='noredirect'||index==levelList.length-1" class="no-redirect">{{ item.meta.title }}</span>
                <a v-else @click.prevent="handleLink(item)">{{ item.meta.title }}</a>
            </el-breadcrumb-item>
        </transition-group>
    </el-breadcrumb>
</template>

<script>
    import permission from '@/assets/json/permission.json'
    import pathToRegexp from 'path-to-regexp'

    export default {
        data () {
            return {
                levelList: null
            }
        },
        watch: {
            $route () {
                this.getBreadcrumb()
            }
        },
        created () {
            this.getBreadcrumb()
        },
        methods: {
            getBreadcrumb () {
                let matched = this.$route.matched.filter(item => item.name)
                // const first = matched[0]
                // if (!this.isDashboard(first)) {
                //     // path: '/dashboard' to '/' 避免dashboard有子级时重复添加
                //     matched = [{path: '/', meta: {title: '病案首页智能质控系统'}}].concat(matched)
                // }
                this.levelList = matched.filter(item => item.meta && item.meta.title && item.meta.breadcrumb !== false)
            },
            isDashboard (route) {
                const name = route && route.name
                if (!name) {
                    return false
                }
                return name.trim().toLocaleLowerCase() === 'Dashboard'.toLocaleLowerCase()
            },
            pathCompile (path) {
                // To solve this problem https://github.com/PanJiaChen/vue-element-admin/issues/561
                const {params} = this.$route
                let toPath = pathToRegexp.compile(path)
                return toPath(params)
            },
            handleLink (item) {
                const {redirect, path, meta} = item
                // 面包屑一级菜单地址修改(日后用动态路由解决)
                if (path === '/system') {
                    this.$router.push({name: this.getFirstMenu('system')})
                    return
                } else if (path === '/quality-control') {
                    this.$router.push({name: this.getFirstMenu('analysis')})
                    return
                }
                // 解决面包屑返回病案明细不带参问题
                if (meta.pageQuery && localStorage.getItem('listQuery')) {
                    let query = JSON.parse(localStorage.getItem('listQuery'))
                    this.$router.push({path: this.pathCompile(path), query: query})
                    return
                } else if (redirect) {
                    this.$router.push(redirect)
                    return
                }
                this.$router.push(this.pathCompile(path))
            },
            /**
             * 获取根目录重定向最近菜单
             * @param name 权限名称
             */
            getFirstMenu (name) {
                let data = JSON.parse(localStorage.getItem('rolesCode'))
                if (data.includes(9999)) {
                    if (name === 'analysis') {
                        return 'ScoreOverview'
                    } else {
                        return 'User'
                    }
                } else {
                    for (let j in permission[name].children) {
                        if (data.indexOf(permission[name].children[j].code) !== -1) {
                            return permission[name].children[j].id
                        }
                    }
                }
            }
        }
    }
</script>

<style rel="stylesheet/scss" lang="scss" scoped>
    .app-breadcrumb.el-breadcrumb {
        display: inline-block;
        font-size: 14px;
        line-height: 50px;
        margin-left: 10px;
        .no-redirect {
            color: #747884;
            cursor: text;
        }
    }
    /deep/.bread-icon-first {
        & > span {
            position: relative;
            display: inline-block;
            width: 16px;
            height: 16px;
            .bread-icon {
                position: absolute;
                top: 2px;
            }
        }
    }
</style>
